package com.itany.corejava.util;

import java.util.Arrays;

/**
 * @author 石小俊
 * 2024年07月23日 16:48
 * 定义一个数组的排序方法,根据实际传递的数组类型不同,排序的规则也不同
 * 定义时只定义排序规则,不做具体实现。在调用时,使用匿名内部类进行具体的实现
 * 例如:如果传递的是数字,则根据数值大小进行降序排序。如果传递的是字符串,则根据字符串长度进行升序排序
 */
public class SortUtil {

    public static void main(String[] args) {
        Integer[] arr = {21, 13, 5, 17, 25, 6, 1};
        SortUtil.sort(arr, new SortCompareInterface<Integer>() {
            @Override
            public int compareTo(Integer t1, Integer t2) {
                // 当t1-t2>0时做升序
                // 当t2-t1>0时做降序
                return t2 - t1;
            }
        });
        System.out.println(Arrays.toString(arr));

        String[] names = {"jack", "tom", "lily", "alex", "admin", "root", "alice"};
        SortUtil.sort(names, new SortCompareInterface<String>() {
            @Override
            public int compareTo(String s1, String s2) {
                return s1.length() - s2.length();
            }
        });
        System.out.println(Arrays.toString(names));
    }

    public static <T> void sort(T[] arr, SortCompareInterface sc) {
        // 在此处编写排序的整体架构
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr.length - 1 - i; j++) {
                int result = sc.compareTo(arr[j], arr[j + 1]);
                if (result > 0) {
                    T temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
    }

}
